package P326_3的幂;

public class Solution {
    public boolean isPowerOfThree(int n) {
        if(n <= 0){
            return false;
        }
        while(n % 3 ==  0){
            n = n /3;
        }
        return n == 1;

    }
    //投机取巧，直接算结果。高中知识，换底公式直接求log3(n)
    //如果n是3^x 那么x = log3(n) = log10(n)/log10(3) = lg10/lg3
    public boolean isPowerOfThree2(int n) {
        if(n <= 0){
            return false;
        }
//        double log3n = Math.log10(n)/Math.log10(3);
        //主要是double和int的结果比较，不能直接 == 需要判断相减的结果

        //取个很小的数来判断精度，这个也不是很靠谱
        double epsilon = 10e6;
        return (Math.log(n) / Math.log(3) + epsilon) % 1 <= 2 * epsilon;

    }

    public boolean isPowerOfThree3(int n){
        //准基转换
        //转换为 3为base的 3进制，那么首位是1，后面全是0就表示是3的幂次方
        return Integer.toString(n,3).matches("^10*$");
    }
}
